# -*- coding: utf-8 -*-
import json
from openai import OpenAI
from industryClassLib import allIndustryClass3

class agentIndustryClass3C4():
    def __init__(self):
        self.client = OpenAI(api_key="sk-de3197a618e3436f8a76b482a17da844", base_url="https://api.deepseek.com/beta")

    def run(self, companyName, gmIndustryClass, liandoIndustryClass):
        # 输入整理
        if not gmIndustryClass:
            gmIndustryClass = "未提及"
        if not liandoIndustryClass:
            liandoIndustryClass = "未提及"
        systemPrompt = """
# 角色
行业分析专家

# 技能
1.具有丰富的行业分析的背景知识；
2.擅长根据提供的信息，准确的分析出公司所归属的行业标签； 

# 行业分类标签格式
以“|”依次拼接第一级、第二级、第三级标签，行业细分程度由粗到细，第一级、第二级和第三级都限定了该标签的行业范围和含义。

# 行业分类标签表
%s

# 归属要求
1. **选择归属的标签**：公司归属标签需要同时满足以下条件：
(1) '公司所属国民行业'与标签具有明显的归属关系； 
(2) '公司所属自建行业'与标签具有明显的归属关系；       
(3) 标签的第一级、第二级和第三级涉及的行业范围都符合'公司所属国民行业'和'公司所属自建行业'，且与'公司名称'有相关性；
(4) 标签与“公司涉及的行业”明显相关；
2. **区分归属标签的强弱**：判断标签与公司涉及的行业的相关性，并标记为“强”或“弱”：
(1) “强”表示该标签与公司涉及的行业相关性高；
(2) “弱”表示该标签与公司涉及的行业相关性低；

# 指令
1.结合'公司名称'，深入理解'公司所属国民行业'和'公司所属自建行业'涉及的行业范围，归纳“公司涉及的行业”；
2.理解指定的'行业分类标签表'中每个标签的含义；
3.对每个'行业分类标签表'与“公司涉及的行业”按照'归属要求'选择归属的标签，并区分归属标签的强弱；
4.按照JSON格式输出公司所归属的'行业分类标签表'中的标签，JSON格式为“{"行业标签1":"强/弱","行业标签2":"强/弱"}”，请确保输出的内容格式正确和内容准确。

# 特例输出
1. 如果公司是教育、课程、培训为主的公司，不需要输出课程内容相关的标签，只输出标签"其他|租赁与商务服务|教育培训"；
2. 如果公司是贸易、商贸、外贸、销售、电商为主的公司，不需要输出设备或制造相关的标签，只需要输出"其他|批发与零售服务"类别下的标签；

# 注意
1. 当归属的标签与'公司所属国民行业'不是明显相关时，删除该标签；
2. 当归属的标签与'公司所属自建行业'不是明显相关时，删除该标签；
3. 有一个及以上'公司所属国民行业'对应的标签，都需要输出；
4. 有一个及以上'公司所属自建行业'对应的标签，都需要输出；
5. 必须使用'行业分类标签表'中的标签，严禁创造新标签；
6. 当归属的标签超过10个时，选择与'公司所属国民行业'和'公司所属自建行业'相关性高的10个标签作为结果；
7. 没有归属的标签时，输出空JSON。

# 示例
## 公司名称示例
郑州晟誉达科技有限公司

## 公司所属国民行业示例
信息传输、软件和信息技术服务业|软件和信息技术服务业|软件开发|基础软件开发

## 公司所属自建行业示例
['人工智能|支撑层|物联网']

## 输出示例
{"新一代信息技术|物联网技术|物联网技术服务":"弱","新一代信息技术|物联网技术|物联网软件开发":"强"}""" % (str(self.industryClass))

        words = """
# 公司名称
%s

# 公司所属国民行业
%s

# 公司所属自建行业
%s

请按照'指令'，输出公司所归属的'行业分类标签表'中的标签。
注意：必须使用提供的'行业分类标签表'中的标签，严禁创造新标签。""" % (companyName, gmIndustryClass, liandoIndustryClass)
        response = self.client.chat.completions.create(
            model="deepseek-chat",
            messages=[
                {'role': 'system', 'content': f'{systemPrompt}'},
                {'role': 'user', 'content': f'{words}'}],
            temperature=0.1,
            response_format={"type": "json_object"},
            max_tokens=8192
        )
        res = {}
        try:
            res = json.loads(response.choices[0].message.content)
            return res
        except Exception as e:
            log = "[ERROR]agentIndustryClass3C4.run(%s): %s"%(companyName, e)
            if res:
                self.logs = self.logs + str(res) + "\n"
            self.logs = self.logs + log + "\n"
            return {}

    def check(self, r):
        res = {}
        for k,v in r.items():
            if k not in self.industryClass:
                log = "[ERROR]agentIndustryClass3C4匹配标签幻觉：“%s:%s”"%(k,v)
                self.logs = self.logs + log + "\n"
                continue
            if v not in ["强", "弱"]:
                log = "[ERROR]agentIndustryClass3C4匹配强度幻觉：“%s:%s”"%(k,v)
                self.logs = self.logs + log + "\n"
                continue
            res[k] = v
        return res

    def progress(self, industryClass3, companyName, product, business):
        self.logs = ""
        self.industryClass = industryClass3
        res = self.run(companyName, product, business)
        explain = ""
        if "解释" in res:
            explain = res["解释"]
            log = "解释：" + res["解释"]
            self.logs = self.logs + log + "\n"
            del res["解释"]
        res = self.check(res)
        return res, explain, self.logs


if __name__ == "__main__":
    companyName = "广州市虎头电池集团股份有限公司"
    gmIndustryClass = '制造业|电气机械和器材制造业|电池制造'
    liandoIndustryClass = ['电子信息|电子元件|电池', '电子信息|电子专用设备|电子元器件设备', '电子信息|智能家电|其他智能家电', '能源环保|新能源产业|太阳能产业', '检验检测|其他检测服务|其他检测', '仪器仪表|通用仪器仪表|电工仪器仪表', '精密机械|电气设备|其他电气设备', '精密机械|电气设备|其他电气机械及器材', '精密机械|电气设备|照明器具', '精密机械|电气设备|输配电及控制设备', '精密机械|其他精密机械|其他精密机械', '精密机械|通用设备|包装专用设备']
    agent = agentIndustryClass3C4()
    r, explain,logs = agent.progress(allIndustryClass3, companyName, gmIndustryClass, liandoIndustryClass)
    print(r)
    # print(explain)
    print(logs)
